package com.example.aiscripteditorserver.services;

import org.opencv.core.Mat;
import org.opencv.core.MatOfByte;
import org.opencv.imgcodecs.Imgcodecs;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

@Service
public class ImageProcessingService {

    /**
     * 将MultipartFile转换为OpenCV的Mat对象。
     *
     * @param file 上传的图像文件
     * @return Mat对象，如果转换失败则返回null
     * @throws IOException 如果读取文件内容失败
     */
    public Mat convertMultipartFileToMat(MultipartFile file) throws IOException {
        if (file.isEmpty()) {
            return null;
        }

        // 1. 获取文件内容的字节数组
        byte[] fileBytes = file.getBytes();

        // 2. 将字节数组包装成MatOfByte
        MatOfByte matOfByte = new MatOfByte(fileBytes);

        // 3. 使用imdecode解码字节数组，生成Mat对象
        // Imgcodecs.IMREAD_UNCHANGED 表示读取原始图像，包括alpha通道
        Mat imageMat = Imgcodecs.imdecode(matOfByte, Imgcodecs.IMREAD_UNCHANGED);

        // 检查是否成功解码
        if (imageMat.empty()) {
            System.err.println("Error: Failed to decode image from MultipartFile.");
            return null;
        }

        return imageMat;
    }
    
}